package main

import (
	"fmt"
	"runtime"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup // countdown 倒计时器， 计数为 0 则不用再 wait
	count := 5
	wg.Add(count)
	fmt.Println(runtime.NumGoroutine())
	fmt.Println("4 main start")

	go func() {
		defer wg.Done() // 计数器 -1
		fmt.Println("我是被主协程创建出来的，我准备创建其他子协程")
		for i := 0; i < count-1; i++ {
			go func(id int) {
				defer wg.Done() // 计数器 -1
				defer fmt.Printf("我是被创建的孙子协程 %d,bye~~~~~~~~~~\n", id)
				fmt.Printf("我是被创建的孙子协程 %d, 开始运行\n", id)
				time.Sleep(5 * time.Second)
			}(i)
		}
	}()
	fmt.Println(runtime.NumGoroutine())
	wg.Wait()
	fmt.Println("5 main end")
	fmt.Println(runtime.NumGoroutine())
}
